﻿using QuanLyChoVayCaNhan.Classes;
using QuanLyChoVayCaNhan.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace QuanLyChoVayCaNhan.Forms
{
    public partial class EditTaiSanDamBao : Form
    {
        private TaiSan data = null;
        private HoSo dataHoSo = null;
        public EditTaiSanDamBao(MenuItemType type)
        {
            switch (type)
            {
                case MenuItemType.ADD:
                    InitializeComponent();
                    data = new TaiSan();
                    data.NgayDinhGia = DateTime.Now;
                    var temp = ModelManager.GetInstance().db.CreateSoTSTC().ToList().FirstOrDefault();
                    if (temp == null) data.SoTSTC = 1;
                    else data.SoTSTC = (((int)temp.Value) + 1);
                    soTSTCTextBox.ReadOnly = false;
                    soTSTCTextBox.Text = data.SoTSTC.ToString();
                    data.NhanVienHTQHKH = UserManager.GetInstance().GetNhanVien();
                    data.MaNVHTQHKH = UserManager.GetInstance().GetMaNhanVien();
                    dataHoSo = (HoSo)WindowsManager.GetInstance().TabThamDinhTaiSanDamBao.SelectedItem;
                    btnHuy.Click += this.btnAddHuy_Click;
                    button2.Click += this.btnAddLuuVaDong_Click;
                    button3.Click += this.btnAddLuuVaIn_Click;
                    break;
                case MenuItemType.EDIT:
                    InitializeComponent();
                    data = Activity.GetInstance().CopyTaiSan(WindowsManager.GetInstance().TabThamDinhTaiSanDamBao.SelectedTaiSan);
                    dataHoSo = (HoSo)WindowsManager.GetInstance().TabThamDinhTaiSanDamBao.SelectedItem;
                    btnHuy.Click += btnEditHuy_Click;
                    button2.Click += this.btnEditLuuVaDong_Click;
                    button3.Click += this.btnEditLuuVaIn_Click;
                    break;
                case MenuItemType.VIEW:
                    InitializeComponent();
                    data = Activity.GetInstance().CopyTaiSan(WindowsManager.GetInstance().TabThamDinhTaiSanDamBao.SelectedTaiSan);
                    dataHoSo = (HoSo)WindowsManager.GetInstance().TabThamDinhTaiSanDamBao.SelectedItem;
                    maTSTextBox.ReadOnly = tenTSTextBox.ReadOnly = giaTriTextBox.ReadOnly = true;
                    btnHuy.Text = "Đóng";
                    button2.Text = "Cập nhật";
                    button3.Text = "In";
                    btnHuy.Click += this.btnViewHuy_Click;
                    button2.Click += this.btnViewCapNhat_Click;
                    button3.Click += this.btnViewIn_Click;
                    break;
                default:
                    break;
            }
        }
        private void EditTaiSanDamBao_Load(object sender, EventArgs e)
        {
            hoSoBindingSource.DataSource = this.dataHoSo;
            taiSanBindingSource.DataSource = this.data;
        } 

        #region Cap Nhat TSDB
        private void btnEditHuy_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void saveEdited()
        {
            TaiSan ts = ModelManager.GetInstance().db.TaiSans.ToList().FirstOrDefault<TaiSan>((x) => x.SoTSTC == data.SoTSTC && x.NgayDinhGia.Date == data.NgayDinhGia.Date);
            decimal giatri = 0;
            if (giaTriTextBox.Text != null || giaTriTextBox.Text.Length > 0)
            {
                if (!decimal.TryParse(giaTriTextBox.Text, out giatri) || giatri < 0)
                {
                    MessageBox.Show("Giá trị tài sản phải là một số không âm");
                    return;
                }
            }
            ts.MaTS = maTSTextBox.Text;
            ts.TenTS = tenTSTextBox.Text;
            ts.GiaTri = giatri;
            ts.Modified = DateTime.Now;
            ModelManager.GetInstance().db.SaveChanges();
        }
        private void btnEditLuuVaDong_Click(object sender, EventArgs e)
        {
            saveEdited();
            this.Close();
        }
        private void btnEditLuuVaIn_Click(object sender, EventArgs e)
        {
            saveEdited();
            TaiSan ts = ModelManager.GetInstance().db.TaiSans.ToList().FirstOrDefault<TaiSan>((x) => x.SoTSTC == data.SoTSTC && x.NgayDinhGia.Date == data.NgayDinhGia.Date);
            PrintManager.GetInstance().InBienBanDinhGiaTaiSan(ts);
        }
        #endregion

        #region Tao Moi TSDB
        private void btnAddHuy_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        private void SaveAdded()
        {
            if (soTSTCTextBox.Text == null || soTSTCTextBox.Text.Length == 0)
            {
                MessageBox.Show("Bạn chưa nhập số biên bản");
                return;
            }
            int so;
            if (!int.TryParse(soTSTCTextBox.Text, out so) || so <= 0)
            {
                MessageBox.Show("Số biên bản phải là một số dương");
            }
            decimal giatri = 0;
            if (giaTriTextBox.Text != null || giaTriTextBox.Text.Length > 0)
            {
                if (!decimal.TryParse(giaTriTextBox.Text, out giatri) || giatri < 0)
                {
                    MessageBox.Show("Giá trị tài sản phải là một số không âm");
                    return;
                }
            }
            data.SoTSTC = so;
            data.MaTS = maTSTextBox.Text;
            data.TenTS = tenTSTextBox.Text;
            data.GiaTri = giatri;
            data.Created = data.Modified = DateTime.Now;
            data.MaHS = ((HoSo)WindowsManager.GetInstance().TabThamDinhTaiSanDamBao.SelectedItem).MaHS;
            data.HoSo = dataHoSo;
            HoSo _hs = ModelManager.GetInstance().db.HoSoes.FirstOrDefault<HoSo>((x) => x.MaHS == dataHoSo.MaHS);
            _hs.TaiSans.Add(data);
            ModelManager.GetInstance().db.SaveChanges();
        }
        private void btnAddLuuVaDong_Click(object sender, EventArgs e)
        {
            SaveAdded();
            this.Close();
        }
        private void btnAddLuuVaIn_Click(object sender, EventArgs e)
        {
            SaveAdded();
            TaiSan ts = ModelManager.GetInstance().db.TaiSans.ToList().FirstOrDefault<TaiSan>((x) => x.SoTSTC == data.SoTSTC && x.NgayDinhGia.Date == data.NgayDinhGia.Date);
            PrintManager.GetInstance().InBienBanDinhGiaTaiSan(ts);
        }
        #endregion
        
        #region Xem TSDB
        private void btnViewHuy_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        private void btnViewCapNhat_Click(object sender, EventArgs e)
        {
            this.Close();
            EditTaiSanDamBao fEditTaiSanDamBao = new EditTaiSanDamBao(MenuItemType.EDIT);
            fEditTaiSanDamBao.ShowDialog(this.ParentForm);
        }
        private void btnViewIn_Click(object sender, EventArgs e)
        {
            PrintManager.GetInstance().InBienBanDinhGiaTaiSan((TaiSan)WindowsManager.GetInstance().TabThamDinhTaiSanDamBao.SelectedTaiSan);
        }
        #endregion

    }
}
